package com.aaa.vegetablemarketexpress.service;

import com.aaa.vegetablemarketexpress.entity.User;
import com.aaa.vegetablemarketexpress.util.Page;
import com.aaa.vegetablemarketexpress.util.Result;
import com.aaa.vegetablemarketexpress.vo.UserStatisticsVO;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * @FileName: UserService
 * @Description:
 * @Author: qxh
 * @CreateTime: 2025/9/6 14:41
 * @Version: 1.0.0
 */
@Service
public interface UserService {
    /**
     * @Description: 登录校验
     * @Param: [userName, password]
     * @return: com.aaa.vegetablemarketexpress.entity.User
     * @Author: qxh
     * @CreateTime: 2025/9/6 14:41
     */
    Result login (String userName, String password);
    /**
     * @Description: 根据用户id查询用户信息
     * @Param: [userId]
     * @return: com.aaa.vegetablemarketexpress.entity.User
     * @Author: qxh
     * @CreateTime: 2025/9/6 14:41
     */
    User selectUserById (Long userId);
    /**
     * @Description: 查询用户列表,分页
     * @Param: [page]
     * @return: com.github.pagehelper.PageInfo<com.aaa.vegetablemarketexpress.entity.User>
     * @Author: qxh
     * @CreateTime: 2025/9/6 14:41
     */
    PageInfo selectUserList (Page<User> page);
    /**
     * @Description: 添加用户
     * @Param: [user]
     * @return: int
     * @Author: qxh
     * @CreateTime: 2025/9/6 14:41
     */
    User insertUser (User user);
    /**
     * @Description: 修改用户
     * @Param: [user]
     * @return: int
     * @Author: qxh
     * @CreateTime: 2025/9/6 14:41
     */
    int updateUser (User user);
    /**
     * @Description: 删除用户
     * @Param: [userId]
     * @return: int
     * @Author: qxh
     * @CreateTime: 2025/9/6 14:41
     */
    int deleteUserById (Long userId);
    /**
     * 校验用户名是否唯一
     */
    String checkUserNameUnique(User user);

    /**
     * 根据用户ID查询用户详细信息（包含部门和角色）
     */
    User selectUserByIdWithRoles(Long userId);

    /**
     * 为用户授权角色
     */
    int insertUserAuth(Long userId, Long[] roleIds);
//    /**
//     * 验证用户身份（忘记密码功能）
//     * @param userName 用户名
//     * @param email 邮箱
//     * @return
//     */
//    Result verifyUser(String userName, String email);
    /**
     * 验证用户身份
     * @param userName 用户名
     * @param phone 手机号
     * @param captcha 验证码
     * @return
     */
    Result verifyUser(String userName, String phone, String captcha);


    /**
     * 重置用户密码
     * @param userId 用户ID
     * @param newPassword 新密码
     * @return
     */
    int resetPassword(Long userId, String newPassword);
    /**
     * 判断用户是否为管理员
     * @param userId 用户ID
     * @return true表示是管理员，false表示不是管理员
     */
    boolean isAdmin(Long userId);

    /**
     * 判断用户是否为商家角色
     */
    boolean isMerchant(Long userId);

    /**
     * 获取用户统计信息
     * @param params 查询参数
     * @return 用户统计信息
     */
    UserStatisticsVO getUserStatistics(Map<String, Object> params);
    Result updatePassword(User user,String newPassword);
    int forgetPassword(User user);

    /**
     * 根据用户名查询
     * @param userName
     * @return
     */
    User queryByUsername(String userName);
    
    /**
     * 根据用户名和手机号查询用户
     * @param userName 用户名
     * @param phone 手机号
     * @return 用户信息
     */
    User selectUserByUserNameAndPhone(String userName, String phone);
    /**
     * shiro登录
     * @param userName
     * @param password
     * @return
     */
    Result checkUser(String userName, String password);
}
